iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
Modern Web

.NET教我做人系列 第 28

Day28 Log 記錄管理

  • 分享至 

  • xImage
  •  

大家好啊~昨天我們學到要如何透過MailKit 這第三方套件來來做郵件寄送的功能,並且嘗試加上附件的功能。納今天的話要來說個很重要的東西logginig(日記記錄),log 對開發專案的人是非常重要的,開發上常常出現的報錯、紀錄等等問題都是可以使用log 來記錄起來

建立紀錄

若要建立記錄,請使用ILogger<TCategoryName>相依性插入 (DI) 的物件

public class AboutModel : PageModel
{
    private readonly ILogger _logger;

    public AboutModel(ILogger<AboutModel> logger)
    {
        _logger = logger;
    }

    public void OnGet()
    {
        _logger.LogInformation("About page visited at {DT}", 
            DateTime.UtcNow.ToLongTimeString());
    }
}

設定紀錄

記錄組態通常是由 appsettings.{ENVIRONMENT}.json 檔案的 Logging 區段所提供,其中 {ENVIRONMENT} 預留位置是環境,像我們如果是開發狀況下就會在appsettings.Development.json 檔案

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}

在Loggingg屬性有LogLevel與紀錄提供者屬性。LogLevel 會指定要針對所選類別記錄的最小層級。 在上述 JSON 中,會指定 Information 和 Warning 記錄層級。 LogLevel 表示記錄的嚴重性,範圍從 0 到 6

Trace = 0
Debug = 1
Information = 2
Warning = 3
Error = 4
Critical = 5
None = 6

指定 LogLevel 時,會針對指定層級和更高層級的訊息啟用記錄。 在上述 JSON 中,Default 類別會記錄為 Information 和更新版本。 例如,會記錄 Information、Warning、Error 和 Critical 訊息。 如果未指定 LogLevel,則記錄預設為 Information 層級

內建的紀錄

ASP.NET Core提供的紀錄分別如下

名稱 使用方式 描述
Console(預設已加入) logging.AddConsole(); 會將輸出記錄到主控台
Debug(預設已加入) logging.AddDebug(); 會使用 system.servicemodel 類別來寫入System.Diagnostics.Debug記錄輸出
EventSource logging.AddEventSourceLogger(); 會寫入名為的跨平臺事件來源 Microsoft-Extensions-Logging
EventLog(僅限Windows) logging.AddEventLog(); 會將記錄輸出傳送至 Windows 事件記錄檔
Azure App Service logging.AddAzureWebAppDiagnostics(); 將記錄寫入至 Azure App Service 應用程式檔案系統中的文字檔,並寫入至 Azure 儲存體帳戶中的 Blob 儲存體

要更換Logging provider,可以從Program.cs中修改成下列範例:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddConsole();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

第三方套件

無非同步記錄器方法

記錄速度應該很快,不值得花費非同步程式碼的效能成本來處理。 若記錄資料存放區很慢,請不要直接寫入其中。 請考慮一開始將記錄寫入到快速的存放區,稍後再將其移到慢速存放區。 例如,當記錄到 SQL Server 時,請勿在 Log 方法中直接執行,因為 Log 方法是同步的。 相反地,以同步方式將記錄訊息新增到記憶體內佇列,並讓背景工作角色提取出佇列的訊息,藉此執行推送資料到 SQL Server 的非同步工作

今天鐵人賽就到這裡,大家明天見~~~

參考資料:


上一篇
Day27 如何發送電子郵件
下一篇
Day29 如何包我們的IMAGE
系列文
.NET教我做人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言